namespace Core.Contracts.Interfaces
{
    using Enums;

    /// <summary>
    /// Features modifier interface contract
    /// </summary>
    public interface IModifier
    {
        /// <summary>
        /// Obtains or defines the modified feature
        /// </summary>
        FeaturesEnum Feature { get; set; }
        /// <summary>
        /// Obtains or defines the modified feature type
        /// </summary>
        FeatureTypesEnum ModifiedFeatureType { get; set; }
        /// <summary>
        /// Obtains or defines the modifier value
        /// </summary>
        double Value { get; set; }
        /// <summary>
        /// Obtains or defines the state of the module has to be to apply te modification
        /// </summary>
        ModuleActivationTypesEnum ActivationState { get; set; }
        /// <summary>
        /// Obtains the value unit
        /// </summary>
        UnitsEnum Unit { get; }
        /// <summary>
        /// Obtains the modifier display name
        /// </summary>
        string DisplayName { get; }
        /// <summary>
        /// Obtains or defines if the modifier should be displayed
        /// </summary>
        bool IsVisible { get; set; }
    }
}